package weaver.interfaces.cese.duss.ceseutil;

import weaver.alioss.AliOSSObjectManager;
import weaver.conn.ConnStatement;
import weaver.conn.RecordSet;
import weaver.docs.docs.ImageFileIdUpdate;
import weaver.file.AESCoder;
import weaver.file.FileManage;
import weaver.file.FileUpload;
import weaver.general.BaseBean;
import weaver.general.Util;
import weaver.sm.SM4Utils;
import weaver.system.SystemComInfo;

import java.io.*;
import java.util.Date;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import static weaver.file.ImageFileManager.deletePdfImageFile;


/**
 * Title: 附件处理基本类
 * Company: weaver
 * 
 * @author fanggsh
 * @version 1.0
 */

public class ImageFileManager extends BaseBean {

    private static ImageFileIdUpdate imageFileIdUpdate = new ImageFileIdUpdate();
    
    private int imageFileId; //附件id
    
    private String imageFileName;//文件名称

    private String imageFileType; //文件MIME类型

    private int imageFileUsed; //文件使用次数

    private String fileRealPath; //文件存放目录

    private String isZip; //是否压缩   0：否  1：是

    private String isencrypt; //是否加密  0：否  1：是   该字段已经基本不使用

    private String filesize; //文件大小   单位为字节

    private int downloads; //下载次数

    private String miniimgpath; //缩略图存放路径

    private String imgsize; //缩略图大小

    private String isFTP; //是否存储到FTP  1:是    0或其它：否

    private int   FTPConfigId;//FTP服务器配置ID

    private int  isaesencrypt;//是否使用AES附件加密  1:是    0或其它：否

    private String aescode; //AES加密密码

    private String tokenKey; //令牌标记

    private String storageStatus; //传输标志 1：成功      2：文件异常  3：传输中  4：不需要传到云  其他：未传输

    private String comefrom; // 附件来源   WorkflowToDoc：流程存为文档
    
    private byte[] data;

    /**
     * 构造函数
     */
    public ImageFileManager() {
        try {
            resetParameter();
        } catch (Exception ex) {
            writeLog(ex);
        }
    }    
    
    /**
     * 重置各参数的值
     */
    public void resetParameter() {
        
        imageFileId=0;
        imageFileName="";
        imageFileType="";
        imageFileUsed=1;
        fileRealPath="";
        isZip="";
        isencrypt="";
        filesize="";
        downloads=0;
        miniimgpath="";
        imgsize="";
        isFTP="";
        FTPConfigId=0;
        isaesencrypt=0;
        aescode="";
        tokenKey="";
        storageStatus="";
        comefrom="";
        data=null;
    }

    /**
     * 返回 附件ID
     * 
     * @return 附件ID
     * @throws Exception
     */
    public int getImageFileId() {
        return imageFileId;
    }

    /**
     * 返回文件名称
     * 
     * @return 文件名称
     * @throws Exception
     */
    public String getImageFileName() {
        return imageFileName;
    }

    /**
     * 返回文件MIME类型
     * 
     * @return 文件MIME类型
     * @throws Exception
     */
    public String getImageFileType() {
        return imageFileType;
    }

    public void setImageFileType(String para) {
        this.imageFileType = para;
    }

    /**
     * 返回文件使用次数
     * 
     * @return 文件使用次数
     * @throws Exception
     */
    public int getImageFileUsed() {
        return imageFileUsed;
    }

    /**
     * 返回文件存放目录
     * 
     * @return 文件存放目录
     * @throws Exception
     */
    public String getFileRealPath() {
        return fileRealPath;
    }

    /**
     * 返回是否压缩
     * 
     * @return 是否压缩
     * @throws Exception
     */
    public String getIsZip() {
        return isZip;
    }

    /**
     * 返回是否加密   该方法已基本不使用
     * 
     * @return 是否加密
     * @throws Exception
     */
    public String getIsencrypt()  {
        return isencrypt;
    }

    /**
     * 返回文件大小   单位为字节
     * 
     * @return 文件大小   单位为字节
     * @throws Exception
     */
    public String getFilesize() {
        return filesize;
    }

    /**
     * 返回下载次数
     * 
     * @return 下载次数
     * @throws Exception
     */
    public int getDownloads()  {
        return downloads;
    }

    /**
     * 返回 缩略图存放路径
     * 
     * @return 缩略图存放路径
     * @throws Exception
     */
    public String getMiniimgpath() {
        return miniimgpath;
    }

    /**
     * 返回缩略图大小
     * 
     * @return 缩略图大小
     * @throws Exception
     */
    public String getImgsize() {
        return imgsize;
    }

    /**
     * 返回是否存储到FTP  1:是    0或其它：否
     * 
     * @return 是否存储到FTP  1:是    0或其它：否
     * @throws Exception
     */
    public String getIsFTP() {
        return isFTP;
    }

    /**
     * 返回FTP服务器配置ID
     * 
     * @return FTP服务器配置ID
     * @throws Exception
     */
    public int getFTPConfigId() {
        return FTPConfigId;
    }

    /**
     * 返回是否使用AES附件加密
     * 
     * @return 是否使用AES附件加密
     * @throws Exception
     */
    public int getIsaesencrypt() {
        return isaesencrypt;
    }

    /**
     * 返回AES加密密码
     * 
     * @return AES加密密码
     * @throws Exception
     */
    public String getAescode() {
        return aescode;
    }

    /**
     * 返回令牌标记
     * 
     * @return 令牌标记
     * @throws Exception
     */
    public String getTokenKey() {
        return tokenKey;
    }

    /**
     * 返回传输标志
     * 
     * @return 传输标志
     * @throws Exception
     */
    public String getStorageStatus()  {
        return storageStatus;
    }

    /**
     * 返回附件来源
     * 
     * @return 附件来源
     * @throws Exception
     */
    public String getComefrom() {
        return comefrom;
    }

    public Date getLastModified()
    {
        Date lastModified = null;
        boolean isonlyAliOSS=false;
        if(!tokenKey.equals("")&&storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
            isonlyAliOSS=true;
        }
        if(isonlyAliOSS){
            lastModified = weaver.alioss.AliOSSObjectUtil.getLastModified(tokenKey);
        }else{
            if(fileRealPath!=null&&!fileRealPath.equals("")){
                File file = new File(fileRealPath);
                boolean bool = file.exists();
                if(bool)
                {
                    long millisec = file.lastModified();
                    lastModified = new Date(millisec);
                }
            }
        }
        return lastModified;
    }

    public Date getLastModified(String fileRealPath)
    {
        Date lastModified = null;
       if(fileRealPath!=null&&!fileRealPath.equals("")) {
           File file = new File(fileRealPath);
           boolean bool = file.exists();
           if (bool) {
               long millisec = file.lastModified();
               lastModified = new Date(millisec);
           }
       }
        return lastModified;
    }

    /**
     * 设置文件名称
     * 
     * @param para
     *            文件名称
     */
    public void setImagFileName(String  para) {
        this.imageFileName = para;
    }
    
    /**
     * 设置附件来源
     * 
     * @param para
     *            附件来源
     */
    public void setComefrom(String para) {
        this.comefrom = para;
    }
    
    /**
     * 设置文档ID
     * 
     * @param para
     *            文档ID
     */
    public void setData(byte[] para) {
        this.data = para;
    }
    
    
    
    /**
     * 返回文件流   已经经过脱密、解压
     * 
     * @return 文件流
     * @throws Exception
     */    
    public InputStream getInputStream() {
        InputStream imagefile = null;
        try{
            boolean isonlyAliOSS=false;
            if(!tokenKey.equals("")&&storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
                isonlyAliOSS=true;
            }

            if(isonlyAliOSS){
                imagefile=weaver.alioss.AliOSSObjectUtil.downloadFile(tokenKey);
            }else{
                if(fileRealPath!=null&&!fileRealPath.equals("")){
                    File thefile = new File(fileRealPath) ;
                    if(isZip.equals("1")) {
                        ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile)) ;
                        if(zin.getNextEntry() != null)
                        imagefile = new BufferedInputStream(zin) ;
                    } else{
                        imagefile = new BufferedInputStream(new FileInputStream(thefile)) ;
                    }
                       
                }else{
                    ConnStatement statement = null;
                    try {
                        statement = new ConnStatement();
                        boolean isoracle = ("oracle").equals(statement.getDBType()) ;
                        String sql = "select imagefile from ImageFile where imagefileid = " + imageFileId;
                        statement.setStatementSql(sql);
                        statement.executeQuery();
                        if(statement.next()){
                            if( isoracle ) imagefile = new BufferedInputStream(statement.getBlobBinary("imagefile")) ;
                            else imagefile = new BufferedInputStream(statement.getBinaryStream("imagefile")) ;                          
                        }
                    } catch(Exception ex) {
                    }finally {
                        try{
                            if(statement!=null) statement.close() ;
                        }catch(Exception ex){
                        }                       
                    }                   
                }
                if(isaesencrypt==1){
                    imagefile = AESCoder.decrypt(imagefile, aescode);
                }               
            }       
        }catch(Exception ex){
            
        }
        return imagefile;
    }    

    /**
     * 返回文件流   已经经过脱密、解压
     * @param imageFileId_para
     * @return 文件流
     * @throws Exception
     */    
    public static InputStream getInputStreamById(int imageFileId_para) {
        InputStream imagefile = null;
        try{
            RecordSet rs = new RecordSet();
            String sql = "select fileRealPath,isZip,isaesencrypt,aescode,tokenKey,storageStatus  from ImageFile where imageFileId = " + imageFileId_para;
            rs.executeQuery(sql);
            if(rs.next()){
                String static_fileRealPath=Util.null2String(rs.getString("fileRealPath"));
                String static_isZip=Util.null2String(rs.getString("isZip"));
                int static_isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
                String static_aescode=Util.null2String(rs.getString("aescode"));
                String static_tokenKey=Util.null2String(rs.getString("tokenKey"));
                String static_storageStatus=Util.null2String(rs.getString("storageStatus"));
                boolean isonlyAliOSS=false;
                if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
                    isonlyAliOSS=true;
                }

                if(isonlyAliOSS){
                    imagefile=weaver.alioss.AliOSSObjectUtil.downloadFile(static_tokenKey);
                }else{
                    if(static_fileRealPath!=null&&!static_fileRealPath.equals("")){
                        File thefile = new File(static_fileRealPath) ;
                        if(static_isZip.equals("1")) {
                            ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile)) ;
                            if(zin.getNextEntry() != null)
                            imagefile = new BufferedInputStream(zin) ;
                        } else{
                            imagefile = new BufferedInputStream(new FileInputStream(thefile)) ;
                        }
                    }else{
                        ConnStatement statement = null;
                        try {
                            statement = new ConnStatement();
                            boolean isoracle = ("oracle").equals(statement.getDBType()) ;
                            statement.setStatementSql("select imagefile from ImageFile where imagefileid = " + imageFileId_para);
                            statement.executeQuery();
                            if(statement.next()){
                                if( isoracle ) {
                                    imagefile = new BufferedInputStream(statement.getBlobBinary("imagefile"));
                                }else{
                                    imagefile = new BufferedInputStream(statement.getBinaryStream("imagefile"));
                                }
                            }
                        } catch(Exception ex) {
                        }finally {
                            try{
                                if(statement!=null) {statement.close();}
                            }catch(Exception ex){
                            }                       
                        }                       
                    }
                    if(static_isaesencrypt==1){
                        imagefile = AESCoder.decrypt(imagefile, static_aescode);
                    }
                    
                }           
            }
            
            
        }catch(Exception ex){
            
        }
        return imagefile;       
    }
    
    /**
     * 通过附件ID得到相应的附件信息
     * 
     * @throws Exception
     */
    public void getImageFileInfoById(int imageFileId_para) {
        
        try{
            RecordSet rs = new RecordSet();
            String sql = "select t1.imageFileId,t1.imageFileName,t1.imageFileType,t1.imageFileUsed,t1.fileRealPath,t1.isZip,t1.isencrypt,t1.filesize,t1.downloads,t1.miniimgpath,t1.imgsize,t1.isFTP,t1.FTPConfigId,t1.isaesencrypt,t1.aescode,t1.tokenKey,t1.storageStatus,t1.comefrom,t2.imagefilename as realname  from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid =  " + imageFileId_para;
            rs.executeSql(sql);
            if(rs.next()){
                imageFileId=Util.getIntValue(rs.getString("imageFileId"),0);
                imageFileName=Util.null2String(rs.getString("realname"));
                if(imageFileName.equals("")){
                    imageFileName = Util.null2String(rs.getString("imageFileName"));
                }                
                imageFileType=Util.null2String(rs.getString("imageFileType"));
                imageFileUsed=Util.getIntValue(rs.getString("imageFileUsed"),0);
                fileRealPath=Util.null2String(rs.getString("fileRealPath"));
                isZip=Util.null2String(rs.getString("isZip"));
                isencrypt=Util.null2String(rs.getString("isencrypt"));
                filesize=Util.null2String(rs.getString("filesize"));
                downloads=Util.getIntValue(rs.getString("downloads"),0);
                miniimgpath=Util.null2String(rs.getString("miniimgpath"));
                imgsize=Util.null2String(rs.getString("imgsize"));
                isFTP=Util.null2String(rs.getString("isFTP"));
                FTPConfigId=Util.getIntValue(rs.getString("FTPConfigId"),0);
                isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
                aescode=Util.null2String(rs.getString("aescode"));
                tokenKey=Util.null2String(rs.getString("tokenKey"));
                storageStatus=Util.null2String(rs.getString("storageStatus"));
                comefrom=Util.null2String(rs.getString("comefrom"));
            }
        }catch(Exception ex){
            
        }
    }

    /**
     * 复制物理文件
     * @param imageFileId_para
     * @return 新的附件id
     */     
    public static int copyImageFile(int imageFileId_para) {
        int new_imageFileId=0;
        if(imageFileId_para<=0){
            return new_imageFileId;
        }
        try{
            String static_imageFileName="";
            String static_imageFileType="";
            int static_imageFileUsed=0;
            String static_fileRealPath="";
            String static_isZip="";
            String static_isencrypt="";
            String static_filesize="";
            int static_downloads=0;
            String static_miniimgpath="";
            String static_imgsize="";
            String static_isFTP="";
            int static_FTPConfigId=0;
            int static_isaesencrypt=0;
            String static_aescode="";
            String static_tokenKey="";
            String static_storageStatus="";
            String static_comefrom="";
            int static_mainimagefile=0;

            RecordSet rs = new RecordSet();         
            String sql = "select t1.imageFileId,t1.imageFileName,t1.imageFileType,t1.imageFileUsed,t1.fileRealPath,t1.isZip,t1.isencrypt,t1.filesize,t1.downloads,t1.miniimgpath,t1.imgsize,t1.isFTP,t1.FTPConfigId,t1.isaesencrypt,t1.aescode,t1.tokenKey,t1.storageStatus,t1.comefrom,t1.mainimagefile,t2.imagefilename as realname  from ImageFile t1 left join DocImageFile t2 on t1.imagefileid = t2.imagefileid where t1.imagefileid =  " + imageFileId_para;
            rs.executeSql(sql);
            if(rs.next()){
                static_imageFileName=Util.null2String(rs.getString("realname"));
                if(static_imageFileName.equals("")){
                    static_imageFileName = Util.null2String(rs.getString("imageFileName"));
                }     
                static_imageFileType=Util.null2String(rs.getString("imageFileType"));
                static_imageFileUsed=Util.getIntValue(rs.getString("imageFileUsed"),0);
                static_fileRealPath=Util.null2String(rs.getString("fileRealPath"));
                static_isZip=Util.null2String(rs.getString("isZip"));
                static_isencrypt=Util.null2String(rs.getString("isencrypt"));
                static_filesize=Util.null2String(rs.getString("filesize"));
                static_downloads=Util.getIntValue(rs.getString("downloads"),0);
                static_miniimgpath=Util.null2String(rs.getString("miniimgpath"));
                static_imgsize=Util.null2String(rs.getString("imgsize"));
                static_isFTP=Util.null2String(rs.getString("isFTP"));
                static_FTPConfigId=Util.getIntValue(rs.getString("FTPConfigId"),0);
                static_isaesencrypt=Util.getIntValue(rs.getString("isaesencrypt"),0);
                static_aescode=Util.null2String(rs.getString("aescode"));
                static_tokenKey=Util.null2String(rs.getString("tokenKey"));
                static_storageStatus=Util.null2String(rs.getString("storageStatus"));
                static_comefrom=Util.null2String(rs.getString("comefrom"));
                static_mainimagefile=Util.getIntValue(rs.getString("mainimagefile"),0);
            }
            if(static_imageFileName==null||static_imageFileName.trim().equals("")){
                return  new_imageFileId;
            }

            SystemComInfo syscominfo = new SystemComInfo();
            String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()) ;
            String fileName = UUID.randomUUID().toString();// System.currentTimeMillis() + "";解决高并发的情况下，文件重复 李迎新 
            if(static_fileRealPath.lastIndexOf(".")>-1){
                fileName+=static_fileRealPath.substring(static_fileRealPath.lastIndexOf("."));                      
            }
            String new_fileRealPath = createdir + fileName ;
            String new_tokenKey=AliOSSObjectManager.getTokenKeyByFileRealPath(new_fileRealPath); 
            String new_storageStatus="";
            new_imageFileId=imageFileIdUpdate.getImageFileNewId();          
            
            boolean isonlyAliOSS=false;
            if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isonlyAliOSS()){
                isonlyAliOSS=true;
            }
            
            if(isonlyAliOSS){
                boolean copyStatus=weaver.alioss.AliOSSObjectUtil.copyObject(static_tokenKey, new_tokenKey);
                if(copyStatus){
                    new_storageStatus="1";
                }
            }else if(!static_tokenKey.equals("")&&static_storageStatus.equals("1")&&AliOSSObjectManager.isEnable()){
                boolean copyStatus=weaver.alioss.AliOSSObjectUtil.copyObject(static_tokenKey, new_tokenKey);
                if(copyStatus){
                    new_storageStatus="1";
                }
                FileManage.createDir(createdir);
                FileManage.copy(static_fileRealPath, new_fileRealPath);             
            }else{
                FileManage.createDir(createdir);
                FileManage.copy(static_fileRealPath, new_fileRealPath);                 
            }
            ConnStatement statement = null;            
            try{
                statement = new ConnStatement();            
                sql = "insert into ImageFile(" +
                        "imageFileId,imageFileName,imageFileType,imageFileUsed,fileRealPath" +
                        ",isZip,isencrypt,filesize,downloads,miniimgpath" +
                        ",imgsize,isFTP,FTPConfigId,isaesencrypt,aescode" +
                        " ,tokenKey,storageStatus,comefrom,mainimagefile" +
                        
                        ") values(" +
                        "?,?,?,?,?" +
                        ",?,?,?,?,?" +
                        ",?,?,?,?,?" +
                        ",?,?,?,?" +
                        ")";
                statement.setStatementSql(sql);
                statement.setInt(1, new_imageFileId);
                statement.setString(2, static_imageFileName);
                statement.setString(3, static_imageFileType);
                statement.setInt(4,static_imageFileUsed);
                statement.setString(5, new_fileRealPath);
                statement.setString(6, static_isZip);
                statement.setString(7, static_isencrypt);
                statement.setString(8, static_filesize);
                statement.setInt(9, static_downloads);
                statement.setString(10, static_miniimgpath);
                statement.setString(11, static_imgsize);
                statement.setString(12, static_isFTP);
                statement.setInt(13,static_FTPConfigId);
                statement.setInt(14, static_isaesencrypt);
                statement.setString(15, static_aescode);
                statement.setString(16, new_tokenKey);
                statement.setString(17, new_storageStatus);
                statement.setString(18, static_comefrom);
                statement.setInt(19, static_mainimagefile);

                statement.executeUpdate();                
                
            }catch(Exception ex){
                new BaseBean().writeLog("1$$$$$$$$$:"+ex.getMessage());
                ex.printStackTrace();
            } finally {
                try {
                    statement.close();
                } catch (Exception ex) {
                }
            }
            
            
        }catch(Exception ex){
            new BaseBean().writeLog("2$$$$$$$$$:"+ex.getMessage());
            ex.printStackTrace();
        }
        new BaseBean().writeLog("2$$$$$$$$$:new_imageFileId:"+new_imageFileId);
        return new_imageFileId;
    }
    
    /**
     * 新建物理文件
     * @return 新的附件id
     */       
    public int saveImageFile(){
        int new_imageFileId=0;
        if(this.data==null){
            return new_imageFileId;
        }
        try{
            String static_imageFileName=this.imageFileName;
            String static_imageFileType="";
            if(this.imageFileType==null||this.imageFileType.trim().equals("")){
                static_imageFileType="application/octet-stream";
            }
            int static_imageFileUsed=1;
            String static_fileRealPath="";
            String static_isZip="";
            String static_isencrypt="";
            String static_filesize="";
            if(this.data!=null){
                static_filesize=""+this.data.length;
            }           
            int static_downloads=0;
            String static_miniimgpath="";
            String static_imgsize="";
            String static_isFTP="";
            int static_FTPConfigId=0;
            int static_isaesencrypt=0;
            String static_aescode="";
            String static_tokenKey="";
            String static_storageStatus="";
            String static_comefrom=this.comefrom;           


            SystemComInfo syscominfo = new SystemComInfo() ;
            String createdir = FileUpload.getCreateDir(syscominfo.getFilesystem()) ;
            String random= UUID.randomUUID().toString(); // 解决高并发下，文件重复问题 李迎新
            String fileName = random ;
            static_isZip = syscominfo.getNeedzip();
            static_isaesencrypt = Util.getIntValue(syscominfo.getIsaesencrypt(),0);
            static_aescode = Util.getRandomString(13);
            
            if("1".equals(static_isZip)){
                fileName += ".zip";
            }          
            String fullName = createdir + fileName ;            
            static_fileRealPath = fullName;
            int fsize = 0;
            FileManage.createDir(createdir);
            //写压缩文件
            OutputStream fileOut = null ;
            try{
                File file = new File(static_fileRealPath) ;
                if(static_isZip.equals("1")) {
                    ZipOutputStream filezipOut = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(file))) ;
                    filezipOut.setMethod(ZipOutputStream.DEFLATED) ; //设置压缩方法
                    filezipOut.putNextEntry(new ZipEntry(random)) ;
                    fileOut = filezipOut ;
                } else {
                    fileOut = new BufferedOutputStream(new FileOutputStream(file)) ;
                }

                if(static_isaesencrypt==1){
                    fileOut = AESCoder.encrypt(fileOut, static_aescode);
					String sm4 = Util.null2String(getPropValue("weaver_security_type","reversible_enc_type"));
					if("sm4".equalsIgnoreCase(sm4)&&static_aescode.startsWith("sm4start")&&static_aescode.endsWith("sm4end")){
						SM4Utils sM4Utils=new SM4Utils();
						byte[] _key=sM4Utils.getSMCode(static_aescode);
						this.data = sM4Utils.encodeBytes(this.data,_key);
					}  
                }

                fileOut.write(this.data, 0, this.data.length) ;
                
            }catch(Exception ex){           
            }finally{
                fileOut.close() ;
            }           
            
            new_imageFileId=imageFileIdUpdate.getImageFileNewId();      
            static_tokenKey=AliOSSObjectManager.getTokenKeyByFileRealPath(static_fileRealPath);         
            
            ConnStatement statement = null;            
            try{
                statement = new ConnStatement();            
                String sql = "insert into ImageFile(" +
                        "imageFileId,imageFileName,imageFileType,imageFileUsed,fileRealPath" +
                        ",isZip,isencrypt,filesize,downloads,miniimgpath" +
                        ",imgsize,isFTP,FTPConfigId,isaesencrypt,aescode" +
                        " ,tokenKey,storageStatus,comefrom" + 
                        
                        ") values(" +
                        "?,?,?,?,?" +
                        ",?,?,?,?,?" +
                        ",?,?,?,?,?" +
                        ",?,?,?" + 
                        ")";
                statement.setStatementSql(sql);
                statement.setInt(1, new_imageFileId);
                statement.setString(2, static_imageFileName);
                statement.setString(3, static_imageFileType);
                statement.setInt(4,static_imageFileUsed);
                statement.setString(5, static_fileRealPath);
                statement.setString(6, static_isZip);
                statement.setString(7, static_isencrypt);
                statement.setString(8, static_filesize);
                statement.setInt(9, static_downloads);
                statement.setString(10, static_miniimgpath);
                statement.setString(11, static_imgsize);
                statement.setString(12, static_isFTP);
                statement.setInt(13,static_FTPConfigId);
                statement.setInt(14, static_isaesencrypt);
                statement.setString(15, static_aescode);
                statement.setString(16, static_tokenKey);
                statement.setString(17, static_storageStatus);
                statement.setString(18, static_comefrom);
                
                statement.executeUpdate();                
                
            }catch(Exception ex){
                
            } finally {
                try {
                    statement.close();
                } catch (Exception ex) {
                }
            }
            
            AliOSSObjectManager aliOSSObjectManager=new AliOSSObjectManager();
            aliOSSObjectManager.uploadFile(static_fileRealPath,static_imageFileName,static_isZip,""+static_isaesencrypt,static_aescode);       
            
        }catch(Exception ex){
            
        }
        return new_imageFileId;
    }
    
    
    /**
     * 更改物理文件后相关触发操作
     * @param imageFileId_para
     */     
    public static void ImageFileTrigger(int imageFileId_para) {
        if(imageFileId_para<=0){
            return ;
        }
        try{
            RecordSet rs = new RecordSet();
            rs.executeSql("insert into ImageFileBackUp(imageFileId) values("+imageFileId_para+")");
            rs.executeSql("update DocPreview set mustReconverted='1' where imageFileId="+imageFileId_para);
            rs.executeSql("update DocPreviewHtml set mustReconverted='1' where imageFileId="+imageFileId_para);
            deletePdfImageFile(imageFileId_para);
        }catch(Exception ex){
            
        }
    }
    
//    public static void deletePdfImageFile(int imageFileId) {
//        if(imageFileId<=0){
//            return ;
//        }
//        try{
//            RecordSet rs = new RecordSet();
//            String sql = "select p.pdfimagefileid,i.filerealpath from pdf_imagefile p,imagefile i where p.pdfimagefileid = i.imagefileid and p.imagefileid = " + imageFileId;
//			rs.executeSql(sql);
//            if(rs.next())
//            {
//                String pdfimagefileid = rs.getString("pdfimagefileid");
//                String filerealpath = rs.getString("filerealpath");
//                File file = new File(filerealpath);
//                FileSecurityUtil.deleteFile(file);
//                rs.executeSql("delete from pdf_imagefile where imagefileid="+imageFileId);
//                rs.executeSql("delete from imagefile where imagefileid="+pdfimagefileid);
//            }
//
//            rs.executeUpdate("delete from convert_imagefile where imagefileid=?",imageFileId);
//
//        }catch(Exception ex){
//
//        }
//    }
}